<?php
// 是否为邮件地址
function is_email($email) {
	return preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', $email) === 1;
}
// 获取时间
function get_time($format = 'Y-m-d H:i:s') {
	return date($format, time());
}
/**
 * 加密解密
 * @param string $string 明文或密文
 * @param string $operation 操作，DECODE表示解密，其他表示加密
 * @param string $key 密钥
 * @param integer $expiry 密文有效期
 * @return string
 */
function pwd_authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
	$ckey_length = 4;

	$key = md5($key ? $key : PWD_AUTH_KEY);
	$keya = md5(substr($key, 0, 16));
	$keyb = md5(substr($key, 16, 16));
	$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

	$cryptkey = $keya.md5($keya.$keyc);
	$key_length = strlen($cryptkey);

	$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
	$string_length = strlen($string);

	$result = '';
	$box = range(0, 255);

	$rndkey = array();
	for($i = 0; $i <= 255; $i++) {
		$rndkey[$i] = ord($cryptkey[$i % $key_length]);
	}

	for($j = $i = 0; $i < 256; $i++) {
		$j = ($j + $box[$i] + $rndkey[$i]) % 256;
		$tmp = $box[$i];
		$box[$i] = $box[$j];
		$box[$j] = $tmp;
	}

	for($a = $j = $i = 0; $i < $string_length; $i++) {
		$a = ($a + 1) % 256;
		$j = ($j + $box[$a]) % 256;
		$tmp = $box[$a];
		$box[$a] = $box[$j];
		$box[$j] = $tmp;
		$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
	}

	if($operation == 'DECODE') {
		if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
			return substr($result, 26);
		} else {
			return '';
		}
	}else {
		return $keyc.str_replace('=', '', base64_encode($result));
	}
}
function pwd_sendmail($email, $subject='', $body='') {
	vendor('PHPMailer.PHPMailerAutoload');
	$mail = new PHPMailer();
	$body = eregi_replace("[\]", '', $body);
	$mail->CharSet = 'utf8';
	$mail->IsSMTP();
	$mail->SMTPDebug = 0;
	$mail->SMTPAuth = true;
	$mail->Host = C('PWD_STMP_HOST');
	$mail->Port = C('PWD_STMP_PORT');
	$mail->Username = C('PWD_STMP_USER');
	$mail->Password = C('PWD_STMP_PASSWORD');
	$mail->setFrom(C('PWD_STMP_USER'), C('PWD_NAME'));
	$mail->addReplyTo(C('PWD_STMP_USER'), C('PWD_NAME'));
	$mail->Subject = $subject;
	$mail->msgHTML($body);
	$mail->addAddress($email, '');
	if (!$mail->send()) {
		return false;
	}else {
		return true;
	}
}
function pwd_rand_code($len=6, $addChars='') {
	// 去掉了容易混淆的字符oOLl和数字01
	$chars = 'ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'.$addChars;
	$chars = str_shuffle($chars);
	return substr($chars, 0, $len);
}
function pwd_encode($str, $key=PWD_AUTH_KEY, $code='bin') {
	$result = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC, PWD_IV);
	switch ($code) {
		case 'base64':
			$ret = base64_encode($result);
			break;
		case 'bin':
		default:
			$ret = $result;
			break;
	}
	return $ret;
}
/**
 * 解密
 */
function pwd_decode($str, $key=PWD_AUTH_KEY, $code='bin') {
	$ret = false;
	switch ($code) {
		case 'base64':
			$str = base64_encode($str);
			break;
		case 'bin':
		default:
			break;
	}
	if (false !== $str) {
		$ret = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC, PWD_IV);
		$ret = trim($ret);
	}
	return $ret;
}